Add validation for WaiterConfig Delay and MaxAttempts values (#3674)#3675
Open
minjcho wants to merge 1 commit intoboto:developfrom
Open
Add validation for WaiterConfig Delay and MaxAttempts values (#3674)#3675minjcho wants to merge 1 commit intoboto:developfrom
minjcho wants to merge 1 commit intoboto:developfrom
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Issue #, if available:
Fixes #3674
Description of changes:
Waiter.wait()now validatesDelayandMaxAttemptsinWaiterConfigbefore entering the polling loop.
Previously, invalid values caused confusing Python runtime errors or
silently broken behavior:
Delay: -1->ValueErrorfromtime.sleep()MaxAttempts: 'abc'->TypeErrorfrom>=comparisonDelay: 0-> rapid-fire API calls with no sleepMaxAttempts: 0-> polls once, then immediately raisesWaiterErrorInvalid values now raise
WaiterConfigErrorwith a clear message beforeany API call is made. This is consistent with existing waiter config
validation (unsupported version, unknown matcher).
Validation rules:
Delay: non-negative number (intorfloat, notbool)MaxAttempts: positive integer (>= 1, notboolorfloat)Note: this intentionally validates against Python built-in numeric types
only (
int,float), consistent with botocore's existingisinstance-basedvalidation patterns. Third-party numeric types (e.g.
numpy.int64) thatpreviously worked implicitly via duck typing will now need to be converted
to native Python types before being passed in
WaiterConfig.Description of tests:
Added 11 unit tests in
tests/unit/test_waiters.py:Rejection cases (9):
Delay: -1(negative)Delay: 'fast'(non-numeric)Delay: NoneDelay: True(bool)MaxAttempts: 0(zero)MaxAttempts: -1(negative)MaxAttempts: 'abc'(non-integer)MaxAttempts: True(bool)MaxAttempts: 1.5(float)Acceptance cases (2):
Delay: 0, MaxAttempts: 1(minimum valid)Delay: 0.5, MaxAttempts: 1(float delay)All rejection tests verify
operation_method.assert_not_called()to confirmno API call is made before validation fails.
By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.